// 请求响应参数（不包含data）
export interface Result {
  code: string
  msg: string
}

// 请求响应参数（包含data）
export interface ResultData<T = any> extends Result {
  data: T
}

// 分页响应参数
export interface ResPage<T> {
  list: T[]
  pageNum: number
  pageSize: number
  total: number
}

// 分页请求参数
export interface ReqPage {
  pageNum: number
  pageSize: number
}

// 文件上传模块
export namespace Upload {
  export interface ResFileUrl {
    fileUrl: string
  }
  /**
   * 文件分类接口，定义了文件分类的基本属性。
   * @interface
   */
  export interface FileCategory {
    /**
     * 分类的唯一标识符。
     * @type {number}
     */
    id: number

    /**
     * 分类的名称。
     * @type {string}
     */
    name: string

    /**
     * 分类对应的URL链接。
     * @type {string}
     */
    url: string
  }
}

// 登录模块
export namespace Login {
  /**
   * @interface loginParams -登录参数
   * @property {string} username -用户名
   * @property {string} password -用户密码
   */
  export interface ReqLoginForm {
    username: string
    password: string
  }

  /**
   * `ILoginInfo` 接口定义了登录信息的数据结构。
   * 包含了标志的不同尺寸图片链接以及滑动图片数组。
   */
  export interface ILoginInfo {
    /**
     * 标志的正方形图片链接
     */
    logo_square: string
    /**
     * 标志的矩形图片链接
     */
    logo_rectangle: string
    /**
     * 登录时的标志图片链接
     */
    login_logo: string
    /**
     * 滑动展示的图片数组
     */
    slide: string[]
  }

  export interface ResLogin {
    access_token: string
  }
  export interface ResAuthButtons {
    [key: string]: string[]
  }
}

// 用户管理模块
export namespace User {
  export interface ReqUserParams extends ReqPage {
    username: string
    gender: number
    idCard: string
    email: string
    address: string
    createTime: string[]
    status: number
  }
  export interface ResUserList {
    id: string
    username: string
    gender: number
    user: { detail: { age: number } }
    idCard: string
    email: string
    address: string
    createTime: string
    status: number
    avatar: string
    photo: any[]
    children?: ResUserList[]
  }
  export interface ResStatus {
    userLabel: string
    userValue: number
  }
  export interface ResGender {
    genderLabel: string
    genderValue: number
  }
  export interface ResDepartment {
    id: string
    name: string
    children?: ResDepartment[]
  }
  export interface ResRole {
    id: string
    name: string
    children?: ResDepartment[]
  }

  /**
   * 菜单信息
   */
  export interface IMenu {
    path: string
    title: string
    icon: string
    header: string
    is_header: number
    children?: IMenu[]
  }

  /**
   * 用户基本信息
   */
  export interface IUserInfo {
    id: number
    account: string
    head_pic: string
  }
}

export namespace Request {
  // 接口响应通过格式
  export interface HttpResponse {
    status: number
    statusText: string
    data: {
      code: number
      desc: string
      [key: string]: any
    }
  }

  /**
   * 登录响应信息
   */
  export interface ILoginResponse {
    token: string
    expires_time: number
    menus: User.IMenu[]
    unique_auth: string[]
    user_info: User.IUserInfo
    logo: string
    logo_square: string
    version: string
    newOrderAudioLink: string
  }
}
